package com.example.chamberlainserver.Entry;

import com.example.chamberlainserver.dto.CounselorPermissions;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 辅导员实体类
 */
@Data
public class Counselor {
    private Integer id;                // 辅导员ID
    private String name;               // 辅导员姓名
    private String employeeId;         // 工号
    private String phone;              // 手机号码
    private String email;              // 邮箱
    private String officeLocation;     // 办公地点
    private String department;         // 所属部门
    private String title;              // 职称
    private String status;             // 状态：在职、离职、休假
    
    @JsonIgnore
    private String permissionsJson;    // 数据库存储的权限JSON字符串
    
    private String avatar;             // 头像URL
    
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;  // 创建时间
    
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;  // 更新时间
    
    // 非数据库字段，用于存储关联的班级列表
    private transient List<Class> classes;
    // 非数据库字段，用于存储管理的班级数量
    private transient Integer classCount;
    
    private static final ObjectMapper objectMapper = new ObjectMapper();
    
    /**
     * 获取权限对象
     */
    @JsonProperty("permissions")
    public CounselorPermissions getPermissions() {
        if (permissionsJson == null || permissionsJson.trim().isEmpty()) {
            return null;
        }
        try {
            return objectMapper.readValue(permissionsJson, CounselorPermissions.class);
        } catch (JsonProcessingException e) {
            // 如果解析失败，返回默认权限
            return CounselorPermissions.createDefault();
        }
    }
    
    /**
     * 设置权限对象
     */
    public void setPermissions(CounselorPermissions permissions) {
        if (permissions == null) {
            this.permissionsJson = null;
        } else {
            try {
                this.permissionsJson = objectMapper.writeValueAsString(permissions);
            } catch (JsonProcessingException e) {
                this.permissionsJson = null;
            }
        }
    }
    
    /**
     * 设置权限JSON字符串（用于数据库操作）
     */
    public void setPermissionsJson(String permissionsJson) {
        this.permissionsJson = permissionsJson;
    }
    
    /**
     * 获取权限JSON字符串（用于数据库操作）
     */
    public String getPermissionsJson() {
        return this.permissionsJson;
    }
}